package br.com.edoc.reflexao;

import java.lang.reflect.Method;
import br.com.edoc.excecoes.ExceptionValidador;
import br.com.edoc.util.TratamentoClass;
import br.com.edoc.validador.ValidadorPadrao;

public class ValidadorObjeto {
	@SuppressWarnings({ "rawtypes", "unused", "unchecked" })
	public void valida(Object obj) throws ExceptionValidador{
		try {
			Class partypes[] = new Class[1];
			partypes[0] = Object.class;
			Class cls = null;
			if(TratamentoClass.getNameClass(obj.getClass().getSuperclass()).equals("Object")){
				 cls = Class.forName("br.com.sgi.validador.Validador"+TratamentoClass.getNameClass(obj.getClass()));
			}else{
				 cls = Class.forName("br.com.sgi.validador.Validador"+TratamentoClass.getNameClass(obj.getClass().getSuperclass()));
			}
			Method meth = cls.getMethod("valida", partypes);
			ValidadorPadrao calida = (ValidadorPadrao) cls.newInstance();
			 calida.valida(obj);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.print("Validador não encontrado");
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			throw new ExceptionValidador(e.getMessage(),e);
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			throw new ExceptionValidador(e.getMessage(),e);
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			throw new ExceptionValidador(e.getMessage(),e);
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			throw new ExceptionValidador(e.getMessage(),e);
		} catch (ExceptionValidador e) {
			// TODO Auto-generated catch block
			throw new ExceptionValidador(e.getMessage());
		}
	}
}
